package online.yangcloud.web.service;

import online.yangcloud.core.model.entity.UserEntity;
import online.yangcloud.core.model.request.file.FileMerger;
import online.yangcloud.core.model.request.file.FileUploadInstance;
import online.yangcloud.core.model.request.file.HashChecker;
import online.yangcloud.core.model.view.file.FileMetadataView;

import java.io.IOException;
import java.util.List;

/**
 * @author zhuboyang
 * @since 2023年11月28 10:59:48
 */
public interface UploadService {

    /**
     * 检测文件块是否已存在库中
     *
     * @param checker 文件块 hash 列表
     * @return 检测结果
     */
    List<Boolean> checkBlockExist(HashChecker checker);

    /**
     * 上传文件块
     *
     * @param uploader 文件块元数据
     * @return 上传的结果
     */
    Integer blockUpload(FileUploadInstance uploader);

    /**
     * 合并文件
     *
     * @param merger 请求参数
     * @param user   当前登录用户
     * @return 文件元数据
     * @throws IOException IOException
     */
    FileMetadataView fileMerge(FileMerger merger, UserEntity user) throws IOException;

}
